<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

  <!--
    1.web 网
      World wide Web 全球广域网  也称为万维网
      一种基于超文本和 HTTP 的，全球性的，动态交互的，跨平台的分布式图形信息系统
    2.统一资源定位符
      想访问web中的某个具体的页面的时候，一定有一个唯一的地址
      网页中的这个地址叫做 统一资源定位符
      URI (Uniform Resource Identifier) 统一资源标识符
      URL (Uniform Resource Locator) 同一资源定位符

      URI 可以理解为是一个接口，定义了一种标准 路径可以是相对的，也可以是绝对的
      URL 可以理解为 URI 的一个具体实现。必须提供足够的信息来定位，路径必须是绝对路径

      Internet 任何一个网页都是通过 URL 确定地址的

      URL格式
        protocol://ip(hostname)[:port][/path]?parameter
        协议：表示在互联网中要遵循的规则
        主机名：要访问的地址的服务器ip或映射后的域名
        端口：在当前服务器中的当前这个进程的id
        路径：可以是访问静态页面的目录，或者做交互的指定要执行类的映射
        参数：如果后台需要获取一些参数值的时候，可以在URL上直接以k-v传递
             第一个参数是? 第二个及以后是 &
    3.架构
      C/S
        client/server 客户端/服务端模式
      B/S
        browser/server 浏览器/服务器模式
          浏览器通过HTTP协议访问服务器，服务器去数据库中操作数据。
          把操作数据的结果返回给服务器，服务器经过处理之后，把显示的结果以 HTML 的形式返回给浏览器
        优点：没有客户端的限制，任何终端只要有浏览器都可以使用
             系统升级比较容易
    4.HTTP
      Hypertext Transfer Protocol 超文本传输协议

      物理层 数据链路层 网络层 传输层 会话层 表示层 应用层
      与 tcp / udp 对比
        HTTP 是应用层协议
        TCP 是传输层协议

      HTTP底层还是利用TCP作为传输协议，使用HTTP，一定支持TCP

      特点：
        1.支持客户端发送请求，服务器响应请求这种形式，且基于TCP协议
        2.简单快速
        3.灵活
        4.无连接
        5.无状态
      工作原理
        http1.0
          一种短连接模式
          一次只能发送一个http请求
        http1.1
          一种长连接模式
          一次TCP连接可以传送多个HTTP的请求和相应，可以重叠进行

      请求：浏览器向服务器发送的索取信息的要求
        格式：报文结构
             请求行
             请求头
               空行：表示请求头结束，请求体开始
             请求体
               空行：表示请求体结束
      响应：服务器根据浏览器的请求返回相应的信息
        格式：报文结构
             响应行
             响应头
               空行：表示请求头结束，请求体开始
             响应体
               空行：表示请求体结束

       请求方法
         HTTP1.1 定义了8种请求方式
           GET：携带的数据会附在URL的后面，相当于明文，不安全，如果涉及隐私信息肯定不用
           POST：URL后面不会携带数据，比较安全的
           CONNECT：将服务器作为代理，让服务器代替用户去访问其他网页，返回数据给用户

           PUT DELETE HEAD OPTION TRACE
       请求URL
       HTTP协议及版本
       请求头 请求体
       响应状态码
         分类：
           1** 信息性状态，接收的请求正在处理
           2** 成功状态码 操作被成功接收且处理
           3** 重定向状态码：需要进行附加操作以完成请求
           4** 客户端错误状态码 请求包含错误的语法，错误的地址，以至于无法完成请求
           5** 服务端错误状态码 服务器在处理请求的过程中发生了错误
         常见的状态码
           100 continue   继续，客户端继续原有的请求
           200 OK         请求成功
           301 move permanently 永久重定向
           302 found      临时重定向
           400 bad request 客户端请求的语法错误，服务器无法理解
           401 unauthorized 发送的请求需要有认证信息
           403 forbidden 请求的访问被服务器拒绝了
           404 not found 请求的资源在服务端没有找到
           405 method not allowed 客户端请求的方法被进制
           500 internal server error 服务器内部错误，无法完成请求 后台报错了
           503 service unavailable 服务器停机中，无法处理请求
       响应头 响应体

     Tomcat
       提供 web 服务的容器

       组件
         server：服务器：可以提供服务的容器，服务可以有多个
           service：服务
             Connector：连接器：通过连接器接收指定的协议发送给Service服务中的唯一引擎
             Engine：引擎：将请求分配到对应的 host 站点上
               Host：站点：根据域名分发请求
                  Context：上下文
  -->

 <!--
    servlet
      广义：是一种规范
      狭义：就是一个应用在服务端的小程序
      servlet必须放在服务端才可以使用，必须有servlet容器来执行
    servlet容器
      Tomcat
      webLogic

    artifacts:人工产品，人工制品。在web中可以理解为一个需要打包的web项目

    生命周期
      javaSE 多线程
      servlet
        初始化阶段
          由servlet容器(tomcat)创建一个Servlet的实例化对象，同样会执行构造方法
          构造方法 init
        响应客户请求阶段
          doGet  doPost  Service
        终止阶段
          web应用主动销毁之前最后执行一次
          destroy

     ServletConfig
        servlet的配置信息  在web.xml中  属于servlet的配置文件
        ServletConfig可以从配置文件(web.xml)中 读取Servlet的配置信息

     Cookie
       服务端向客户端发送的少量文本信息(最多4k)
       Cookie的数据是存在于浏览器(客户端)中
       但是是由服务端控制怎么存储
         数据存于不存
         存哪些数据，不存哪些数据
         存储数据的时间有多长
     session
       会话跟踪
         两者之间的持续一段时间的交流
       一个客户端与服务器之间不中断的请求响应序列
       数据是存储在服务端
          session中的所有信息存储在服务端
          sessionID 作为此session的唯一标识给客户端的
          客户端携带id去服务端找session的信息

          客户端存储id的方式
             Cookie
             SSL sessions 安全套接字层
             URL Rewriting 重写URL

       session 失效
        1.关闭浏览器  即表示关闭连接
        2.时间超时 默认是1800秒 30分钟
        3.通过手动的方式，人为关闭

    JSP
      前后端分离    前端 框架 VUE  JSP(了解)

      jsp是什么
        java 和 JavaScript
        JS 和 JSP
        JavaServerPage
        jsp看起来很像html，但是本质上是一个servlet，编译后就是一个servlet类
        html做前端只能做静态展示(内容是写死的)
        jsp才可以做动态的展示

        jsp页面 - .java类 - .class

    语法
      以html为主 主要功能还是做前端的页面展示
      可以嵌入java的代码逻辑，本质是java类，可以无缝整合java代码
      web目录下，而不是src

      注释
        html:
          在网页源代码中可以看见这个注释
        jsp:<%-- --%>
          在网页源代码中是看不见这个注释的

      脚本元素 / java程序片 / java代码段
        在jsp中嵌入java代码

        声明：相当于定义了全局变量    属性和方法
             <%! java代码  %>
        代码段：相当于局部执行
             <% 代码 %>
        表达式：获取某个具体的内容
             <%= 变量名%>

      Page指令
        contextType jsp输出内容的类型
        import  在jsp中引入jar包
        errorPage   如果当前页面产生异常，自动跳转到这个标签设置的页面
        isErrorPage  可以捕获异常
      include指令
      taglib指令
        原理与引第三方的jar包是一样的
        但是jar包引的是类，而taglib引的是页面中的标签

      内置对象 9大内置对象
        request     HttpServletRequest
        response    HttpServletResponse
        session     HttpSession
        application ServletContext
        out         JspWriter
        pageContext PageContext
        page        Object(this)
        config      ServletConfig
        exception

    四个作用域
       作用域：起作用的区域范围

       page         只在当前页面有效
       request      对于一次请求有效
       session      对于一次会话有效
       application  在整个web工程中都有效

    转发和重定向
       代码写在servlet中，处理的结果要跳转到哪里
       转发
         一次请求，只能转到当前服务器的其他资源上
         可以携带数据
       重定向
         重新确定方向 两次请求 可以重定向到任何URL地址
         可以重定向到当前web项目中，也可以脱离当前web项目
         不能携带数据

    EL表达式
        Expression Language 为了使JSP写起来更加的简单

        语法：
          ${获取变量}
          默认查找的是page作用域的值，如果找不到，自动按照 page request session application的顺序向上查找
          如果在某个作用域找到了不再继续向上查找，如果所有作用域都没找到才返回null

          如果逻辑上确定要查找具体的某个作用域的值，可以添加作用域指定
            pageScope
            requestScope
            sessionScope
            applicationScope
        运算符
           算数运算  逻辑运算  关系判断  判空  三目

    JSTL表达式
      JavaServerPage Standard Tag Library  JSP标准标签库

      核心标签库
      i18N格式标签库
      sql
      xml
      函数
 -->

<!--
    javaWeb三大组件
        servlet 服务端的小程序
        filter 过滤器
        Listener 监听器
        同等重要，但是 filter 和 Listener 使用频率稍微比servlet更少一些

    filter 过滤器
       是在进入到servlet之前或者是执行完servlet马上响应页面的时候都可以对逻辑进行过滤
       可以过滤什么？
          servlet，jsp，静态的图片 html
       作用：做一些条件的筛选，共有的功能的添加
       比如：在进入servlet之前统一设置字符编码
            图片或语音的压缩
            身份验证
            sql注入
            记录日志
       工作原理
           在客户端和servlet之间加了一层filter 有request过滤器和response过滤器
       生命周期
           servlet：创建对象 (构造方法) ，init() , deGet/doPost/service ,destroy()
           filter:创建对象实例化(构造方法)，init(),doFilter(),destroy()
       使用：
           filter只有一种，而所谓的前置和后置是通过doFilter中的逻辑进行处理
           filter中有一个放行的方法，此方法之前的逻辑是前置filter，此方法之后的逻辑是后置filter
           如果进入到servlet之前的过滤条件有很多，可以利用过滤器链形式完成，增加代码的复用性和可读性
       URL的映射规则
          请求是否执行过滤器，执行哪些过滤器这件事请求本身(客户端)没有权利控制的
          必须由过滤器本身设定要对哪些请求进行过滤
          1.具体指定：  /library/book
          2.路径指定：  /library/user/*
          3.扩展名指定： *.do *.jsp  /library/*.do
       映射的方式
         1.web.xml
         2.annotation
       过滤器链：
         在所有的filter都设定完映射规则之后，servlet请求就已经自动形成了链的结构
         顺序：
            web.xml：根据定义filter的顺序确定过滤器链的顺序
            annotation：按名字顺序确定过滤器链的顺序
   Listener监听器
     可以监视客户端的请求，服务端的操作的行为，只要出发了监听器所监听的事件都会执行相应的操作
     监听什么
       HttpServletRequest
       HttpSession
       ServletContext
     监听行为
       对象的生命周期
        create destroy
       对象的属性变化
        add remove replace

     15中行为  6个类

   AJAX(Asynchronous JavaScript And XML)
     读音
     基于xml的在js中执行的局部(异步)刷新技术
     异步
        同步：必须等待每个事件执行结束才开始执行下一个事件
        异步：在执行当前事件的同时可以开辟另一条路线执行另外一个事件
             允许同一时间可以处理多个事件，类似于多线程执行
     优点
        更好的交互体验：局部刷新，不影响整个页面
        提高了性能和速度：最大程度上减少多余的请求
     缺点
        增加了设计和开发时间
        比经典的web应用程序更复杂一些

     使用：
        1.创建 XMLHttpRequest 对象的实例化对象
        2.使用这个实例化对象调用属性和方法
          2.1 open() 建立一个servlet的连接
              2.1.1 request-type:GET POST
              2.1.2 url:要连接的url地址(包含但不限于servlet)
              2.1.3 asynch：是否为异步，默认值是 true，没有极特殊的情况下，不建议修改为false
              2.1.4 username
              2.1.5 password
          2.2 onreadystatechange = function()
          2.3 send()
          2.4 回调函数内使用 readyState,表示的是send的状态
              0 - 还没有调用send方法
              1 - (载入)已调用send方法，正在发送请求
              2 - (载入完成)send方法执行完毕，请求已经发送
              3 - (交互)servlet正在解析响应内容
              4 - (完成)响应内容解析完成，可以在客户端使用返回的内容
          2.5 回调函数内使用 status ，表示的是响应状态码
          2.6 回调函数内使用 responseText ，表示的是执行完servlet之后的响应结果

      案例：给定邮政编码。返回省份和城市

      jquery中的ajax
        $.ajax(url,[settings])
        $.ajax([settings])
          此方式用起来比较麻烦，但是功能最全面的的最底层的方法
          url：访问地址
          type：传输类型 GET/POST
          data:需要传递的参数
          dataType：响应回来的数据的类型  text html  json xml script
          success：回调函数，执行servlet成功后执行的函数
          error：回调函数，执行servlet失败后执行的函数
       $.get()
       $.post()
       $.getJSON()
       jqueryDom对象.load
-->



</body>
</html>